package edu.cibertec.sicsolutions.parameters;

import java.util.Iterator;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import edu.cibertec.sicsolutions.constants.GlobalConstant;

/**
 * Clase Singleton para el manejo de parametros.
 * Toma por defecto el archivo parameterConfig.xml
 * 
 *
 */
public final class Parameter {
	
	private final  static Parameter instance = new Parameter();
	
	private static Map cacheXml = null;	
	
	private Parameter(){		
	}
	
	/**
	 * Obtiene la instancia unica
	 * @return
	 */
	public static Parameter getInstance(){
		return instance;
	}
	
	private void inititialize(){
		XMLParameterConfig parameterConfig = null;
		try {
			parameterConfig = XMLParameterUtil.getParameterConfigDefault();
		} catch (Exception e) {
			System.out.println("Error al leer el archivo parameterConfig:"+e);
		}
		
		for (Iterator iterator = parameterConfig.getParameters().iterator(); iterator.hasNext();) {
			XMLParameter param = (XMLParameter) iterator.next();
			cacheXml.put(param.getKey(), param.getValue());			
		}
	}
	
	/**
	 * Obtiene el valor del parametro. Si no existe el parametro devuelve null
	 * @param key
	 * @return
	 */
	public String getValue(String key){
		if (cacheXml == null) {
			cacheXml = new ConcurrentHashMap();
			inititialize();
		}
		return cacheXml.containsKey(key)?(String)cacheXml.get(key):null;
	}
	
	/**
	 * Obtiene el valor del parametro. Si no existe el parametro devuelve ""
	 * @param key
	 * @return
	 */
	public String getValueBlank(String key){
		return cacheXml.containsKey(key)?(String)cacheXml.get(key):GlobalConstant.STRING_EMPTY;
	}
	
	public void refresh(){
		inititialize();
	}

}
